FUNCTION Benveniste() implements the Benveniste's variable step size CLMS algorithm Based on the book of A. Benveniste, M. Metivier and P. Priouret, Adaptive Algorithms and Stochastic Approximation, New York: Spinger-Verlag, 1990 INPUT: x: input signal which should be scaled according to the dynamic range of nonlinearity N: filter length mu: step-size rho: step-size of adaptation of mu OUTPUT: y: filter output Complex Valued Nonlinear Adaptive Filtering toolbox for MATLAB Supplementary to the book: "Complex Valued Nonlinear Adaptive Filters: Noncircularity, Widely Linear and Neural Models" by Danilo P. Mandic and Vanessa Su Lee Goh (c) Copyright Danilo P. Mandic 2009 http://www.commsp.ee.ic.ac.uk/~mandic %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You can obtain a copy of the GNU General Public License from http://www.gnu.org/copyleft/gpl.html or by writing to Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...........................................
0001 % FUNCTION Benveniste() implements the Benveniste's variable step size CLMS algorithm 0002 % 0003 % Based on the book of A. Benveniste, M. Metivier and P. Priouret, Adaptive Algorithms and Stochastic Approximation, New York: Spinger-Verlag, 1990 0004 % 0005 % INPUT: 0006 % x: input signal which should be scaled according to the dynamic range of nonlinearity 0007 % N: filter length 0008 % mu: step-size 0009 % rho: step-size of adaptation of mu 0010 % 0011 % OUTPUT: 0012 % y: filter output 0013 % 0014 % 0015 % Complex Valued Nonlinear Adaptive Filtering toolbox for MATLAB 0016 % Supplementary to the book: 0017 % 0018 % "Complex Valued Nonlinear Adaptive Filters: Noncircularity, Widely Linear and Neural Models" 0019 % by Danilo P. Mandic and Vanessa Su Lee Goh 0020 % 0021 % (c) Copyright Danilo P. Mandic 2009 0022 % http://www.commsp.ee.ic.ac.uk/~mandic 0023 % 0024 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0025 % This program is free software; you can redistribute it and/or modify 0026 % it under the terms of the GNU General Public License as published by 0027 % the Free Software Foundation; either version 2 of the License, or 0028 % (at your option) any later version. 0029 % 0030 % This program is distributed in the hope that it will be useful, 0031 % but WITHOUT ANY WARRANTY; without even the implied warranty of 0032 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0033 % GNU General Public License for more details. 0034 % 0035 % You can obtain a copy of the GNU General Public License from 0036 % http://www.gnu.org/copyleft/gpl.html or by writing to 0037 % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. 0038 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0039 % ........................................... 0040 function y = Benveniste(x,N,mu,rho) 0041 0042 M = 1;% prediction horizon 0043 L = length(x)-M; % length of simulation 0044 filterinput = zeros(N,L);%input of FIR 0045 filteroutput = zeros(1,L);%output of FIR 0046 learning = zeros(1,L);% the adaptive learning rate; 0047 Phi = zeros(N,1); 0048 WVSLMS = zeros(N,1);% weight 0049 eVSLMS = zeros(1,L);% error 0050 EVSLMS = zeros(1,L);% mean square error 0051 filteroutput = zeros(1,L);% output 0052 0053 0054 for i = 1:L 0055 for m = 1:N 0056 if (i-m+1)>0 0057 filterinput(m,i) = x(1,i-m+1); 0058 else 0059 filterinput(m,i) = 0; 0060 end 0061 end 0062 0063 filteroutput(i) = transpose(filterinput(:,i)) * WVSLMS;% 0064 eVSLMS(i) = x(i+M) - filteroutput(i);% 0065 EVSLMS(i) = 10 * log10(1/2 * eVSLMS(i)' * eVSLMS(i)); 0066 if i == 1 0067 learning(1) = mu; 0068 Phi = zeros(N,1); 0069 else 0070 Phi = (eye(N,N) - learning(i-1) * conj(filterinput(:,i-1)) * transpose(filterinput(:,i-1))) * Phi + ... 0071 eVSLMS(i-1) * conj(filterinput(:,i-1)); 0072 learning(i) = learning(i-1) + rho * real(eVSLMS(i) * filterinput(:,i)'* conj(Phi)); 0073 end 0074 WVSLMS = WVSLMS + learning(i) * eVSLMS(i) * conj(filterinput(:,i)); 0075 end 0076 y = filteroutput; 0077 0078 0079